package br.com.cast.notaFiscal.produto.paginas;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.spring.injection.annot.SpringBean;

import br.com.cast.notaFiscal.HomePage;
import br.com.cast.notaFiscal.models.Produto;
import br.com.cast.notaFiscal.notaFiscal.paginas.CadastroNotaFiscal;
import br.com.cast.notaFiscal.services.IProdutoService;
import br.com.cast.notaFiscal.util.ComponentUtil;
public class ListarProduto extends Panel {

	private static final long serialVersionUID = 1L;
	@SpringBean
	private IProdutoService produtoService;
	private CadastroProduto cadastroProduto;

	public ListarProduto(String id) {
		super(id);
		cadastroProduto = new CadastroProduto(HomePage.ID_CONTEUDO);
		criaLinkIncluir();

		DataView<Produto> dataView = criaDateView();

		criaPaginacao(dataView);
	}

	private void criaPaginacao(DataView<Produto> dataView) {
		add(new PagingNavigator("paginacao", dataView));
	}

	private DataView<Produto> criaDateView() {
		DataView<Produto> dataView = new DataView<Produto>("produtos",
				produtoService) {

			@Override
			protected void populateItem(final Item<Produto> item) {

				if (item.getIndex() % 2 != 0) {
					// para linhas impares adiciona um estilo diferente.
					// o indice começa no zero
					item.add(AttributeModifier.replace("class", "alt"));
				}

				item.add(new Label("descricao"));
				item.add(new Label("valor"));
		
				item.add(new Link("alterar") {
					@Override
					public void onClick() {
						cadastroProduto.atualizaModel(item
								.getDefaultModelObject());
						redirecionaCadastro(cadastroProduto);
					}

				});

				item.add(new Link("excluir") {
					@Override
					public void onClick() {
						Produto produto = (Produto) item
								.getDefaultModelObject();
						produtoService.excluir(produto);
						HomePage template = ComponentUtil.getTemplate(this);
						template.success("Registro excluído com sucesso!");
					}

				});

			}

		};

		dataView.setItemsPerPage(5);

		add(dataView);
		return dataView;
	}

	private void criaLinkIncluir() {
		add(new Link("incluir") {
			@Override
			public void onClick() {
				redirecionaCadastro(cadastroProduto);
			}
		});
	}

	private void redirecionaCadastro(final CadastroProduto cadastroProduto) {
		HomePage template = ComponentUtil.getTemplate(this);
		template.replace(cadastroProduto);
	}
}
